18183
22162
Qual é o método mais rápido para converter um java.nio.ByteBuffer a em um (recém-criado) CharBuffer b ou char [] b.
Ao fazer isso, é importante que a [i] == b [i]. Isso significa que não a [i] e a [i + 1] juntos formam um valor b [j], o que getChar (i) faria, mas os valores deveriam ser "espalhados".
byte a [] = {1,2,3, 125,126,127, -128, -127, -126} // cada um byte (que são assinados)
char b [] = {1,2,3, 125,126,127, 128, 129, 130} // cada um a char (que não têm sinal)
Observe que byte: -128 tem os mesmos (8 menores) bits que char: 128. Portanto, presumo que a "melhor" interpretação seria a que observei acima, porque os bits são os mesmos.
Depois disso, também preciso da tradução vice-versa: A maneira mais eficiente de obter um char [] ou java.nio.CharBuffer de volta em um java.nio.ByteBuffer. 
Então, o que você quer é converter usando a codificação ISO-8859-1.
Não afirmo nada sobre eficiência, mas pelo menos é bastante curto para escrever:
Resultado CharBuffer = Charset.forName ("ISO-8859-1"). Decode (byteBuffer);
A outra direção seria:
Resultado de ByteBuffer = Charset.forName ("ISO-8859-1"). Encode (charBuffer);
Por favor, compare isso com outras soluções. (Para ser justo, a parte Charset.forName não deve ser incluída e também deve ser feita apenas uma vez, não para cada buffer novamente.)
Do Java 7 em diante, também existe a classe StandardCharsets com instâncias Charset pré-instanciadas, para que você possa usar
Resultado CharBuffer = StandardCharsets.ISO_8859_1.decode (byteBuffer);
e
Resultado de ByteBuffer = StandardCharsets.ISO_8859_1.encode (charBuffer);
em vez de. (Essas linhas fazem o mesmo que as anteriores, apenas a pesquisa é mais fácil e não há risco de digitar os nomes incorretamente e não há necessidade de capturar as exceções impossíveis.)
|
Eu concordaria com a sugestão de @ Ishtar para evitar a conversão para uma nova estrutura e apenas converter conforme necessário.
No entanto, se você tiver um heap ByteBuffer, poderá fazer.
ByteBuffer bb = ...
byte [] array = bb.array ();
char [] chars = novo char [bb.remaining ()];
para (int i = 0; i